package com.entity.yaml

import com.annotations.DefaultValue
import com.entity.PackPath
import com.serialization.PackPathSerialization
import io.github.stream29.jsonschemagenerator.Description
import kotlinx.serialization.Serializable

/**
 * 全局配置
 */
@Serializable
data class Global(

    /**
     * 启动后是否清理缓存文件,默认true
     */
    @property:Description("启动后是否清理缓存文件,默认true")
    @DefaultValue("true")
    val clearCacheOnStart: Boolean = true,
    /**
     * 上传完成后 是否清除临时缓存的文件
     *
     * 如果 [RunEnvironment.clearCache] 配置true,则此配置失效
     */
    @property:Description("上传完成后是否清除临时缓存的文件，如果RunEnvironment.clearCache配置为true则此配置失效")
    @DefaultValue("false")
    val clearCache: Boolean = false,
    /**
     * 缓存文件名字
     */
    @property:Description("监控文件变化crc缓存文件名字")
    @DefaultValue("cache.txt")
    val cacheName: String = "cache.txt",
    /**
     * 上传要被忽略的路径头部
     *
     * 如果是null 将使用 [AppConfig.outDir] 做为路径
     */
    @property:Description("上传要被忽略的路径头部，如果是null将使用AppConfig.outDir作为路径")
    @DefaultValue("null")
    var uploadParent: @Serializable(with = PackPathSerialization::class) PackPath? = null,
    /**
     * 上传id 如果指定可以快速适配到目的桶
     */
    @property:Description("上传id，如果指定可以快速适配到目的桶")
    @DefaultValue("null")
    val distributionId: String? = null,
    /**
     * 上传执行jar程序路径  如果不配置默认 使用 ./data/\*.jar
     */
    @property:Description("上传执行jar程序路径，如果不配置默认使用./data/*.jar")
    @DefaultValue("null")
    val packJarPath: String? = null,
    /**
     * 缓存路径配置，最终效果 [cachePath]/[cacheName]
     *
     * 如果没有配置,则使用 [AppConfig.outDir] 做为路径
     */
    @property:Description("缓存路径配置，最终效果cachePath/cacheName，如果没有配置则使用AppConfig.outDir作为路径")
    @DefaultValue("\"\"")
    var cachePath: @Serializable(with = PackPathSerialization::class) PackPath = PackPath(""),

)
